#include "stack.h"
#include<stdio.h>
#include<stdarg.h>
#include <stdlib.h>

/**
 * 创建一个指定容量的堆栈
 * @param capacity 堆栈的容量
 * @return 创建好的堆栈的指针
 */
stack* create_stack(unsigned capacity) {
    // TODO 由学员补齐
   stack* s = (stack*)malloc(sizeof(stack) + sizeof(int) * capacity);
   if (s == NULL) {
    printf("内存分配失败\n");
    return NULL;
    }
  
    s->size = 0; // 初始时堆栈中没有元素
    s->top = -1; // 栈顶指针初始化为 -1，表示堆栈为空
    return s;

}

/**
 * 入栈
 * @param s 堆栈指针
 * @param val 要添加到堆栈中的参数
 */
int push(stack* s, int val) {
    if(s->top == s->size - 1)
    {
        printf("堆栈已满，无法压栈\n");
        return -1;
    }
    s->top++;
    s->size++;
    s->data[s->top] = val;
    return 0;

}

/**
 * 弹栈
 * @param s 堆栈指针
 * @return 返回当前栈顶的元素
 */
int pop(stack* s) {
    if(s->top = -1)
    {
        printf("堆栈为空，无法弹栈\n");
        return -1; // 返回一个错误值
    }
    s->size--;
    s->top--;
    return s->data[s->top];

}

/**
 * 释放堆栈
 */
void release_stack(stack* s) {
    if(s == NULL){
        return;
    }
    free(s);
}
